/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model.perfil;

import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import model.dao.IRepositorioPerfil;
import model.daoimpl.GenericDAO;
import model.excecoes.ErroDAOException;

/**
 *
 * @author Marcos
 */
public class RepositorioPerfil extends GenericDAO<Perfil> implements IRepositorioPerfil {

    @Override
    public List<Perfil> listarPerfil(String consulta, String campo) throws ErroDAOException, PersistenceException, NoResultException {
        List<Perfil> perfis = null;
        Query query = null;

        try {
            if (consulta.equals("Todos") && campo.equals("Todos")) {
                query = this.getManager().createQuery("Select r From Perfil r JOIN FETCH r.cliente JOIN FETCH r.vendas");
            } else {
                if (campo.equals("Código")) {
                    query = this.getManager().createQuery("Select r From Perfil r JOIN FETCH r.cliente  JOIN FETCH r.vendas Where r.codigo = :codigo");
                    query.setParameter("codigo", Integer.parseInt(consulta));
                } else {
                    if (campo.equals("Nome do Cliente")) {
                        query = this.getManager().createQuery("Select r From Perfil as r JOIN FETCH r.cliente JOIN FETCH r.vendas Where r.cliente.nome like :nome");
                        query.setParameter("nome", consulta);
                    } else {
                        if (campo.equals("Produto mais comprado")) {
                            query = this.getManager().createQuery("Select MAX(v.quantidadeComprada) as quantidade From VendaVista as v JOIN FETCH v.perfil JOIN FETCH v.produtos");
                        }
                    }
                }
            }
        } catch (NoResultException ex) {
            throw new ErroDAOException("Erro de Consulta.\nDetalhes Técnicos:\n" + ex.getMessage());
        } catch (PersistenceException ex) {
            throw new ErroDAOException("Erro de Persistência.\nDetalhes Técnicos:\n" + ex.getMessage());
        }
        perfis = query.getResultList();
        return perfis;
    }

    @Override
    public int identificarCodigoCliente(String nome, String cpf) throws ErroDAOException, PersistenceException, NoResultException {
        int codigo = 0;

        try {
            Query query = this.getManager().createQuery("Select r.cliente.codigo From Perfil r JOIN FETCH r.cliente Where r.cliente.nome = :nome and r.cliente.cpf = :cpf");
            query.setParameter("nome", nome);
            query.setParameter("cpf", cpf);
            if (query.getFirstResult() != 0) {
                codigo = query.getFirstResult();
            }
        } catch (NoResultException ex) {
            throw new ErroDAOException("Erro de Consulta.\nDetalhes Técnicos:\n" + ex.getMessage());
        } catch (PersistenceException ex) {
            throw new ErroDAOException("Erro de Persistência.\nDetalhes Técnicos:\n" + ex.getMessage());
        }

        return codigo;
    }

}
